<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>2_不用函数柯里化实现</title>
  </head>
  <body>
    <!-- 准备好一个容器 -->
    <div id="test"></div>

    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom, 用于支持react操作DOM -->
    <script
      type="text/javascript"
      src="../js/react-dom.development.js"
    ></script>
    <!-- 引入babel, 用于将jsx转为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <script type="text/babel">

      /*
        高阶函数：如果一个函数符合下面2个规范中的任何一个，那么函数就是高阶函数。
          1. 若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数。
          2. 若A函数，调用的返回值依然是一个函数，那么A就可以称之为高阶函数。
          常见的高阶函数有：Promise, setTimeout, arr.map()等等

        函数的柯里化：通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码形式。
      */

        //创建组件
      class Login extends React.Component {

        //初始化数据
        state = {
          username: '',
          password: ''
        }

        //表单提交的回调
        handleSubmit = (event)=>{
            event.preventDefault() //阻止表单提交
            const {username,password} = this.state
            alert(`你的用户名为：${username},密码为：${password}`)
        }

        //保存表单到状态中
        saveFormData = (dataType,event) => {
          this.setState({[dataType]:event.target.value})
        }

        render() {
          return (
            <div>
                <form onSubmit={this.handleSubmit}>
                    <input type="text" onChange={ event => this.saveFormData('username',event)} name="username"/>
                    <input type="text" onChange={ event => this.saveFormData('password',event)} name="password"/>
                    <button>登录</button>
                </form>    
            </div>
          );
        }
    }
    //渲染组件
    ReactDOM.render(<Login/>,document.getElementById('test'))
    </script>
  </body>
</html>
